import time

from django.shortcuts import render
from rest_framework import viewsets
from .models import Absent,AbsentType,AbsentStatusChoices #导入模型
from .serializers import AbsentSerializer,AbsentTypeSerializer
from rest_framework.response import Response

#1.发起考勤（create）
#2.处理考勤 (update)
#3.查看自己考勤列表 (list?who=my)
#4.查看下属考勤列表 (list?who=sub)

#class AbsentViewSet(viewsets.ModelViewSet):
class AbsentViewSet(viewsets.ModelViewSet):
    queryset = Absent.objects.all() #指定queryset属性，获取所有实例
    serializer_class = AbsentSerializer #指定序列化器

    #重写更改方法
    def update(self, request, *args, **kwargs):
        #默认情况下，要修改某一数据，必须上传该数据的序列化指定的所有字段
        #如果只想上传并修改一部分数据
        kwargs['partial'] = True
        return super().update(request, *args, **kwargs)
            #super表示调用父类的方法

    #重写list方法（获取请假列表）
    def list(self, request, *args, **kwargs):
        queryset = Absent.objects.all()
        who = request.query_params.get('who') #从查询参数中获取who的值
        if who and who =='sub':
            result = queryset.filter(responder = request.user) #包含下属的请假记录
        else:
            result = queryset.filter(requester = request.user) #只含本人的请假记录

        #因为重写了list方法，所以分页功能需要自己写（看list源方法）
        page = self.paginate_queryset(result) #result代表符合要求的数据
        #paginate_queryset会做分页的逻辑处理
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        #get_paginated_response除了返回序列化的数据外，还会发送总数量和上一页url等
        serializer=self.serializer_class(result,many=True)  #将查询后的数据实例化
                                            #表示处理一个列表
        return Response(data=serializer.data)

#1.请假类型:目的是将请假类型有哪些传递给前端
from rest_framework.views import APIView
from .utils import get_responder
from apps.oaauth.serializers import UserSerializer
class AbsentTypeViewSet(APIView):
    def get(self,request):
        types = AbsentType.objects.all()
        serializer = AbsentTypeSerializer(types,many=True)
        return Response(data=serializer.data)
#2.显示审批者
class ResponderView(APIView):
    def get(self,request):
        responder = get_responder(request) #使用定义过的方法获取审批者

        serializer = UserSerializer(responder)
        #如果序列化的对象是一个None，不会报错而是返回一个包含除主键外所有字段的空字典
        return Response(data=serializer.data)










